查看原文
其他

PowerShell自动部署ASP.NET Core程序到 IIS

DotNet 2019-08-03

(点击上方蓝字,可快速关注我们)


来源:ZKEASOFT

cnblogs.com/seriawei/p/8487441.html


Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。


接下我们就要借助PowerShell来自动部署ASP.NetCore程序。


打开PowerShell


打开开始菜单,输入 PowerShell 进行搜索就可以看到它了



WebAdministration


首先我们要引入PowerShell中的WebAdministration模块,这样就可以对IIS进行相关的操作了


Import-Module WebAdministration


DotNetCore.WindowsHosting


要在IIS中运行ASP.NetCore程序,首先要安装DotNetCore.WindowsHosting,如果已经安装,可以跳过该步骤


下载DotNetCore.WindowsHosting并安装它


Invoke-WebRequest -Uri "https://aka.ms/dotnetcore.2.0.0-windowshosting" -OutFile "DotNetCore.WindowsHosting.exe"

Start-Process "DotNetCore.WindowsHosting.exe" -Wait


安装完DotNetCore.WindowsHosting之后,要重启IIS服务


Invoke-Expression "net stop was /y"

Invoke-Expression "net start w3svc"


可以使用以下命令来检测ASPNetCoreModule是否已安装


Get-WebGlobalModule -Name AspNetCoreModule -ErrorAction Ignore


程序部署,IIS设置


在IIS中部署程序要做两件事件,1. 创建一个应用程序池,2. 创建一个网站并使用这个应用程序池


接下来要创建一个应用程序池,名称为TestApp


New-Item -path IIS:\AppPools\TestApp


把应用程序池的.Net版本设置为无托管代码


Set-ItemProperty -Path IIS:\AppPools\TestApp -Name managedRuntimeVersion -Value ''


创建了应用程序池之后,就要创建一个网站,并使用刚创建的应用程序池TestApp,将网站的名称设置为TestSite,并指向你的网站路径如C:\TestSite


New-Website -name TestSite -PhysicalPath "C:\TestSite" -

ApplicationPool TestApp -Port 8080


最后就可以打开浏览器进行访问了


Invoke-Expression "cmd.exe /C start http://localhost:8080"


完整脚本


以上是在用PowerShell部署到IIS时的关键命令,知道了这些就可以来写一个完整自动部署脚本了。以部署ZKEACMS为例,创建一个名为ZKEACMS.ps1的文件,并将以下代码粘贴到文件中保存。


该脚本中包含了对IIS的检测,DotNetCore.WindowsHosting的检测和安装,在线下载程序并解压等:


Add-Type -AssemblyName System.IO.Compression.FileSystem

Import-Module WebAdministration

$WebPath=[environment]::CurrentDirectory + "\ZKEACMS";

Write-Host "Welcome to use ZKEACMS, visit our website(http://www.zkea.net) for more information"

Write-Host "ZKEACMS will install to $WebPath"

Write-Host "After installation, you can visit the site with http://localhost:8080"

Write-Host "Installation started. Press Ctrl+C to stop."

 

Write-Host "Checking IIS status..."

$iis = Get-Service W3SVC -ErrorAction Ignore

if($iis){

    if($iis.Status -eq "Running") {

        Write-Host "IIS Service is running"

    }

    else {

        Write-Host "IIS Service is not running"

    }

}

else {

    Write-Host "Checking IIS failed, please make sure IIS is ready."   

}

$aspNetCoreModule = Get-WebGlobalModule -Name AspNetCoreModule -ErrorAction Ignore

if($aspNetCoreModule)

{

    Write-Host "IIS ASPNetCoreModule is ready:"

    Write-Host $aspNetCoreModule.Name $aspNetCoreModule.Image

}

else

{

    Write-Host "Downloading DotNetCore.WindowsHosting."

    if(Test-Path -Path "DotNetCore.WindowsHosting.exe")

    {

        Remove-Item -Path "DotNetCore.WindowsHosting.exe" -Force

    }

    Invoke-WebRequest -Uri "https://aka.ms/dotnetcore.2.0.0-windowshosting" -OutFile "DotNetCore.WindowsHosting.exe"

     

    Write-Host "Installing DotNetCore.WindowsHosting."

    Start-Process "DotNetCore.WindowsHosting.exe" -Wait

    if(Test-Path -Path "DotNetCore.WindowsHosting.exe")

    {

        Remove-Item -Path "DotNetCore.WindowsHosting.exe" -Force

    }

}

 

Write-Host "Downloading ZKEACMS application package."

if(Test-Path -Path "ZKEACMS.zip")

{

    Remove-Item -Path "ZKEACMS.zip" -Force

}

Invoke-WebRequest -Uri "http://cdn.zkeasoft.com/core/cms.zip" -OutFile "ZKEACMS.zip"

 

Write-Host "Unzip ZKEACMS application package."

if(Test-Path "ZKEACMS")

{

    Remove-Item -Path "ZKEACMS" -Force -Recurse

}

[System.IO.Compression.ZipFile]::ExtractToDirectory("ZKEACMS.zip" ,"ZKEACMS")

 

Write-Host "Setting up IIS."

if(!(Test-Path IIS:\AppPools\ZKEACMS))

{

    New-Item -path IIS:\AppPools\ZKEACMS

}

Set-ItemProperty -Path IIS:\AppPools\ZKEACMS -Name managedRuntimeVersion -Value ''

if(Test-Path IIS:\Sites\ZKEACMS)

{

    Remove-Website ZKEACMS

}

New-Website -name ZKEACMS -PhysicalPath $WebPath -ApplicationPool ZKEACMS -Port 8080

Invoke-Expression "net stop was /y"

Invoke-Expression "net start w3svc"

Invoke-Expression "cmd.exe /C start http://localhost:8080"

if(Test-Path -Path "ZKEACMS.zip")

{

    Remove-Item -Path "ZKEACMS.zip" -Force

}

Write-Host "ZKEACMS installed successfully."


执行脚本


执行脚本的方式很简单,可以在PowerShell的控制台中直接使用脚本的名称即可(注意路径)


./ZKEACMS.ps1


或者可以直接鼠标右键该脚本文件,然后选择菜单中的使用 PowerShell 运行


如果你的脚本在网络上,可以直接在控制台中使用以下脚本来运行而不用下载它,例如可以使用以下脚本来在线安装ZKEACMS:


@powershell -NoProfile -ExecutionPolicy unrestricted -Command "&([scriptblock]::Create((Invoke-WebRequest -useb 'http://cdn.zkeasoft.com/core/win-zkeacms.ps1')))"


看完本文有收获?请转发分享给更多人

关注「DotNet」,提升.Net技能 

淘口令复制以下红色内容,再打开手淘即可购买

范品社,使用¥极客T恤¥抢先预览(长按复制整段文案,打开手机淘宝即可进入活动内容)

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存